{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "cnn-rand_02.ipynb",
      "version": "0.3.2",
      "provenance": [],
      "collapsed_sections": []
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.6.4"
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "TPU"
  },
  "cells": [
    {
      "metadata": {
        "colab_type": "code",
        "id": "tY_UaVjg5vtc",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "import numpy as np\n",
        "import os\n",
        "\n",
        "from keras.models import Sequential, Model\n",
        "from keras.layers import Dense, Dropout, Flatten, Input, MaxPooling1D, Convolution1D, Embedding\n",
        "from keras.layers.merge import Concatenate\n",
        "from keras.datasets import imdb\n",
        "from keras.preprocessing import sequence\n",
        "from keras.optimizers import Adam\n",
        "import keras as keras\n",
        "\n",
        "import re\n",
        "import itertools\n",
        "from collections import Counter\n",
        "\n",
        "import tensorflow as tf\n",
        "\n",
        "np.random.seed(0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "djzcmbGPFWnr",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def clean_Up(string):\n",
        "    \"\"\"\n",
        "    Tokenization/string cleaning for all datasets except for SST.\n",
        "    Original taken from https://github.com/yoonkim/CNN_sentence/blob/master/process_data.py\n",
        "    \"\"\"\n",
        "    string = re.sub(r\"[^A-Za-z0-9(),!?\\'\\`]\", \" \", string)\n",
        "    string = re.sub(r\"\\'s\", \" \\'s\", string)\n",
        "    string = re.sub(r\"\\'ve\", \" \\'ve\", string)\n",
        "    string = re.sub(r\"n\\'t\", \" n\\'t\", string)\n",
        "    string = re.sub(r\"\\'re\", \" \\'re\", string)\n",
        "    string = re.sub(r\"\\'d\", \" \\'d\", string)\n",
        "    string = re.sub(r\"\\'ll\", \" \\'ll\", string)\n",
        "    string = re.sub(r\",\", \" , \", string)\n",
        "    string = re.sub(r\"!\", \" ! \", string)\n",
        "    string = re.sub(r\"\\(\", \" \\( \", string)\n",
        "    string = re.sub(r\"\\)\", \" \\) \", string)\n",
        "    string = re.sub(r\"\\?\", \" \\? \", string)\n",
        "    string = re.sub(r\"\\s{2,}\", \" \", string)\n",
        "    return string.strip().lower()\n",
        "\n",
        "\n",
        "def load_data():\n",
        "    # Load data from files\n",
        "    positive_examples = list(open(\"/rt-polarity.pos\", encoding='latin-1').readlines())\n",
        "    positive_examples = [s.strip() for s in positive_examples]\n",
        "    negative_examples = list(open(\"/rt-polarity.neg\", encoding='latin-1').readlines())\n",
        "    negative_examples = [s.strip() for s in negative_examples]\n",
        "    # Split by words\n",
        "    x_text = positive_examples + negative_examples\n",
        "    x_text = [clean_Up(sent) for sent in x_text]\n",
        "    x_text = [s.split(\" \") for s in x_text]\n",
        "    # Generate labels\n",
        "    positive_labels = [[0, 1] for _ in positive_examples]\n",
        "    negative_labels = [[1, 0] for _ in negative_examples]\n",
        "    y = np.concatenate([positive_labels, negative_labels], 0)\n",
        "    return [x_text, y]\n",
        "\n",
        "\n",
        "def pad_sentences(sentences, padding_word=\"<PAD/>\"):\n",
        "    # pad sentences to the longest sentence's size\n",
        "    sequence_length = max(len(x) for x in sentences)\n",
        "    padded_sentences = []\n",
        "    for i in range(0,len(sentences)):\n",
        "        sentence = sentences[i]\n",
        "        num_padding = sequence_length - len(sentence)\n",
        "        new_sentence = sentence + [padding_word] * num_padding\n",
        "        padded_sentences.append(new_sentence)\n",
        "    return padded_sentences\n",
        "\n",
        "\n",
        "def build_vocab(sentences):\n",
        "    # Build vocabulary\n",
        "    word_counts = Counter(itertools.chain(*sentences))\n",
        "    # Mapping from index to word\n",
        "    vocabulary_inv = [x[0] for x in word_counts.most_common()]\n",
        "    # Mapping from word to index\n",
        "    vocabulary = {x: i for i, x in enumerate(vocabulary_inv)}\n",
        "    return [vocabulary, vocabulary_inv]\n",
        "\n",
        "\n",
        "def build_input_data(sentences, labels, vocabulary):\n",
        "    x = np.array([[vocabulary[word] for word in sentence] for sentence in sentences])\n",
        "    y = np.array(labels)\n",
        "    return [x, y]\n",
        "\n",
        "\n",
        "def load_preprocess_data():\n",
        "    # Load and preprocess data\n",
        "    sentences, labels = load_data()\n",
        "    sentences_padded = pad_sentences(sentences)\n",
        "    vocabulary, vocabulary_inv = build_vocab(sentences_padded)\n",
        "    x, y = build_input_data(sentences_padded, labels, vocabulary)\n",
        "    return [x, y, vocabulary, vocabulary_inv]\n",
        "\n",
        "\n",
        "def batch_iter(data, batch_size, num_epochs):\n",
        "    data = np.array(data)\n",
        "    data_size = len(data)\n",
        "    num_batches_per_epoch = int(len(data) / batch_size) + 1\n",
        "    for epoch in range(num_epochs):\n",
        "        # Shuffle the data at each epoch\n",
        "        shuffle_indices = np.random.permutation(np.arange(data_size))\n",
        "        shuffled_data = data[shuffle_indices]\n",
        "        for batch_num in range(0,num_batches_per_epoch):\n",
        "            start_index = batch_num * batch_size\n",
        "            end_index = min((batch_num + 1) * batch_size, data_size)\n",
        "            yield shuffled_data[start_index:end_index]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "H9rcV4VQ6ImL",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Model Hyperparameters\n",
        "embedding_dim = 50\n",
        "filter_sizes = (3,4,5)\n",
        "num_filters = 10\n",
        "dropout_prob = (0.5, 0.8)\n",
        "hidden_dims = 50\n",
        "\n",
        "# Training parameters\n",
        "batch_size = 50\n",
        "num_epochs = 50\n",
        "\n",
        "# Prepossessing parameters\n",
        "sequence_length = 400\n",
        "max_words = 5000"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "_8tf7UZj6Iso",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "def process_data():\n",
        "    x, y, vocabulary, vocabulary_inv_list = load_preprocess_data()\n",
        "    vocabulary_inv = {key: value for key, value in enumerate(vocabulary_inv_list)}\n",
        "    y = y.argmax(axis=1)\n",
        "\n",
        "    # Shuffle data\n",
        "    shuffle_indices = np.random.permutation(np.arange(len(y)))\n",
        "    x = x[shuffle_indices]\n",
        "    y = y[shuffle_indices]\n",
        "    train_len = int(len(x) * 0.9)\n",
        "    x_train = x[:train_len]\n",
        "    y_train = y[:train_len]\n",
        "    x_test = x[train_len:]\n",
        "    y_test = y[train_len:]\n",
        "\n",
        "    return x_train, y_train, x_test, y_test, vocabulary_inv"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "atAfwQrt6Iz3",
        "outputId": "db478e4b-695c-4730-d734-89bfc9f18080",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 102
        }
      },
      "cell_type": "code",
      "source": [
        "# Data Preparation\n",
        "print(\"Load data...\")\n",
        "x_train, y_train, x_test, y_test, vocabulary_inv = process_data()\n",
        "\n",
        "if sequence_length != x_test.shape[1]:\n",
        "    print(\"Adjusting sequence length for actual size\")\n",
        "    sequence_length = x_test.shape[1]\n",
        "\n",
        "print(\"x_train shape:\", x_train.shape)\n",
        "print(\"x_test shape:\", x_test.shape)\n",
        "print(\"Vocabulary Size: {:d}\".format(len(vocabulary_inv)))\n",
        "\n",
        "embedding_weights = None"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Load data...\n",
            "Adjusting sequence length for actual size\n",
            "x_train shape: (9595, 56)\n",
            "x_test shape: (1067, 56)\n",
            "Vocabulary Size: 18765\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "Ixxpb2WX6VSZ",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "input_shape = (sequence_length,)\n",
        "\n",
        "model_input = Input(shape=input_shape)\n",
        "\n",
        "z = Embedding(len(vocabulary_inv), embedding_dim, input_length=sequence_length, name=\"embedding\")(model_input)\n",
        "\n",
        "z = Dropout(dropout_prob[0])(z)\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "78Y-YICh6VUy",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "# Convolutional block\n",
        "conv_blocks = []\n",
        "for sz in filter_sizes:\n",
        "    conv = Convolution1D(filters=num_filters,\n",
        "                         kernel_size=sz,\n",
        "                         padding=\"valid\",\n",
        "                         activation=\"relu\",\n",
        "                         strides=1)(z)\n",
        "    conv = MaxPooling1D(pool_size=2)(conv)\n",
        "    conv = Flatten()(conv)\n",
        "    conv_blocks.append(conv)\n",
        "z = Concatenate()(conv_blocks) if len(conv_blocks) > 1 else conv_blocks[0]\n",
        "\n",
        "z = Dropout(dropout_prob[1])(z)\n",
        "z = Dense(hidden_dims, activation=\"relu\")(z)\n",
        "model_output = Dense(1, activation=\"sigmoid\")(z)\n",
        "\n",
        "step = tf.Variable(0, trainable=False)\n",
        "# rate = tf.train.exponential_decay(0.001, step, 100000, 0.01) # tuning for learning rate, decay\n",
        "opt = keras.optimizers.Adam(lr=0.01,decay=0.055)\n",
        "\n",
        "model = Model(model_input, model_output)\n",
        "model.compile(loss=\"binary_crossentropy\", optimizer=opt, metrics=[\"accuracy\"])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "LO9tEhnp6VXK",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "MSt0V4x36VZt",
        "outputId": "ac488af4-187e-4737-c343-c2da937852fc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1751
        }
      },
      "cell_type": "code",
      "source": [
        "# Train the model\n",
        "import time\n",
        "start=time.time()\n",
        "history=model.fit(x_train, y_train, batch_size=batch_size, epochs=num_epochs,\n",
        "          validation_data=(x_test, y_test), verbose=2)\n",
        "print(\"Modified CNN-rand runtime: \", time.time()-start)"
      ],
      "execution_count": 25,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Train on 9595 samples, validate on 1067 samples\n",
            "Epoch 1/50\n",
            " - 7s - loss: 0.6951 - acc: 0.5096 - val_loss: 0.6923 - val_acc: 0.5623\n",
            "Epoch 2/50\n",
            " - 6s - loss: 0.6872 - acc: 0.5448 - val_loss: 0.6832 - val_acc: 0.6401\n",
            "Epoch 3/50\n",
            " - 6s - loss: 0.6695 - acc: 0.5933 - val_loss: 0.6538 - val_acc: 0.6973\n",
            "Epoch 4/50\n",
            " - 6s - loss: 0.6364 - acc: 0.6464 - val_loss: 0.6105 - val_acc: 0.7095\n",
            "Epoch 5/50\n",
            " - 6s - loss: 0.5896 - acc: 0.6938 - val_loss: 0.5696 - val_acc: 0.7413\n",
            "Epoch 6/50\n",
            " - 6s - loss: 0.5348 - acc: 0.7393 - val_loss: 0.5389 - val_acc: 0.7498\n",
            "Epoch 7/50\n",
            " - 6s - loss: 0.5010 - acc: 0.7624 - val_loss: 0.5209 - val_acc: 0.7619\n",
            "Epoch 8/50\n",
            " - 6s - loss: 0.4698 - acc: 0.7789 - val_loss: 0.5095 - val_acc: 0.7685\n",
            "Epoch 9/50\n",
            " - 6s - loss: 0.4478 - acc: 0.7958 - val_loss: 0.5032 - val_acc: 0.7666\n",
            "Epoch 10/50\n",
            " - 6s - loss: 0.4248 - acc: 0.8076 - val_loss: 0.4978 - val_acc: 0.7835\n",
            "Epoch 11/50\n",
            " - 6s - loss: 0.3937 - acc: 0.8269 - val_loss: 0.4940 - val_acc: 0.7826\n",
            "Epoch 12/50\n",
            " - 6s - loss: 0.3895 - acc: 0.8300 - val_loss: 0.4931 - val_acc: 0.7751\n",
            "Epoch 13/50\n",
            " - 6s - loss: 0.3687 - acc: 0.8370 - val_loss: 0.4911 - val_acc: 0.7826\n",
            "Epoch 14/50\n",
            " - 6s - loss: 0.3566 - acc: 0.8453 - val_loss: 0.4909 - val_acc: 0.7854\n",
            "Epoch 15/50\n",
            " - 6s - loss: 0.3559 - acc: 0.8463 - val_loss: 0.4895 - val_acc: 0.7882\n",
            "Epoch 16/50\n",
            " - 6s - loss: 0.3450 - acc: 0.8529 - val_loss: 0.4897 - val_acc: 0.7891\n",
            "Epoch 17/50\n",
            " - 6s - loss: 0.3380 - acc: 0.8546 - val_loss: 0.4890 - val_acc: 0.7891\n",
            "Epoch 18/50\n",
            " - 6s - loss: 0.3309 - acc: 0.8574 - val_loss: 0.4886 - val_acc: 0.7948\n",
            "Epoch 19/50\n",
            " - 6s - loss: 0.3218 - acc: 0.8632 - val_loss: 0.4886 - val_acc: 0.7948\n",
            "Epoch 20/50\n",
            " - 6s - loss: 0.3146 - acc: 0.8697 - val_loss: 0.4911 - val_acc: 0.7948\n",
            "Epoch 21/50\n",
            " - 6s - loss: 0.3135 - acc: 0.8656 - val_loss: 0.4898 - val_acc: 0.7976\n",
            "Epoch 22/50\n",
            " - 6s - loss: 0.3055 - acc: 0.8718 - val_loss: 0.4903 - val_acc: 0.7976\n",
            "Epoch 23/50\n",
            " - 6s - loss: 0.3100 - acc: 0.8712 - val_loss: 0.4894 - val_acc: 0.7985\n",
            "Epoch 24/50\n",
            " - 6s - loss: 0.2917 - acc: 0.8790 - val_loss: 0.4907 - val_acc: 0.7966\n",
            "Epoch 25/50\n",
            " - 6s - loss: 0.2937 - acc: 0.8806 - val_loss: 0.4914 - val_acc: 0.7994\n",
            "Epoch 26/50\n",
            " - 6s - loss: 0.2894 - acc: 0.8803 - val_loss: 0.4928 - val_acc: 0.7929\n",
            "Epoch 27/50\n",
            " - 6s - loss: 0.2834 - acc: 0.8858 - val_loss: 0.4930 - val_acc: 0.7929\n",
            "Epoch 28/50\n",
            " - 6s - loss: 0.2841 - acc: 0.8836 - val_loss: 0.4955 - val_acc: 0.7901\n",
            "Epoch 29/50\n",
            " - 6s - loss: 0.2852 - acc: 0.8839 - val_loss: 0.4945 - val_acc: 0.7938\n",
            "Epoch 30/50\n",
            " - 6s - loss: 0.2756 - acc: 0.8859 - val_loss: 0.4932 - val_acc: 0.8032\n",
            "Epoch 31/50\n",
            " - 6s - loss: 0.2749 - acc: 0.8887 - val_loss: 0.4937 - val_acc: 0.7994\n",
            "Epoch 32/50\n",
            " - 6s - loss: 0.2713 - acc: 0.8915 - val_loss: 0.4956 - val_acc: 0.7948\n",
            "Epoch 33/50\n",
            " - 6s - loss: 0.2642 - acc: 0.8895 - val_loss: 0.4954 - val_acc: 0.7966\n",
            "Epoch 34/50\n",
            " - 6s - loss: 0.2644 - acc: 0.8908 - val_loss: 0.4955 - val_acc: 0.7994\n",
            "Epoch 35/50\n",
            " - 6s - loss: 0.2698 - acc: 0.8910 - val_loss: 0.4957 - val_acc: 0.8013\n",
            "Epoch 36/50\n",
            " - 6s - loss: 0.2564 - acc: 0.8963 - val_loss: 0.4960 - val_acc: 0.8013\n",
            "Epoch 37/50\n",
            " - 6s - loss: 0.2607 - acc: 0.8939 - val_loss: 0.4976 - val_acc: 0.7976\n",
            "Epoch 38/50\n",
            " - 6s - loss: 0.2517 - acc: 0.8998 - val_loss: 0.4973 - val_acc: 0.8013\n",
            "Epoch 39/50\n",
            " - 7s - loss: 0.2489 - acc: 0.8983 - val_loss: 0.4992 - val_acc: 0.7994\n",
            "Epoch 40/50\n",
            " - 6s - loss: 0.2467 - acc: 0.9013 - val_loss: 0.4993 - val_acc: 0.8004\n",
            "Epoch 41/50\n",
            " - 6s - loss: 0.2461 - acc: 0.9033 - val_loss: 0.5005 - val_acc: 0.7994\n",
            "Epoch 42/50\n",
            " - 6s - loss: 0.2454 - acc: 0.9006 - val_loss: 0.5022 - val_acc: 0.7976\n",
            "Epoch 43/50\n",
            " - 6s - loss: 0.2413 - acc: 0.9026 - val_loss: 0.5040 - val_acc: 0.7994\n",
            "Epoch 44/50\n",
            " - 6s - loss: 0.2407 - acc: 0.9031 - val_loss: 0.5026 - val_acc: 0.8013\n",
            "Epoch 45/50\n",
            " - 6s - loss: 0.2335 - acc: 0.9097 - val_loss: 0.5054 - val_acc: 0.8004\n",
            "Epoch 46/50\n",
            " - 6s - loss: 0.2345 - acc: 0.9034 - val_loss: 0.5048 - val_acc: 0.7994\n",
            "Epoch 47/50\n",
            " - 6s - loss: 0.2351 - acc: 0.9070 - val_loss: 0.5068 - val_acc: 0.8013\n",
            "Epoch 48/50\n",
            " - 6s - loss: 0.2400 - acc: 0.9052 - val_loss: 0.5066 - val_acc: 0.8041\n",
            "Epoch 49/50\n",
            " - 6s - loss: 0.2363 - acc: 0.9029 - val_loss: 0.5072 - val_acc: 0.8013\n",
            "Epoch 50/50\n",
            " - 6s - loss: 0.2250 - acc: 0.9115 - val_loss: 0.5078 - val_acc: 0.8004\n",
            "Modified CNN-rand runtime:  305.32007360458374\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "o1MIEF-A8wzZ",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "train_loss=history.history['loss']\n",
        "val_loss=history.history['val_loss']"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "x1vVUc-S8w7k",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "train_acc=history.history['acc']\n",
        "val_acc=history.history['val_acc']"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "metadata": {
        "colab_type": "code",
        "id": "BRcPazwc8w-p",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 367
        },
        "outputId": "0f1a3f12-fd6c-417a-98e9-7881c08c0081"
      },
      "cell_type": "code",
      "source": [
        "import matplotlib.pyplot as plt\n",
        "plt.figure(figsize=(15, 5))\n",
        "plt.subplot(1,2,1)\n",
        "plt.title(\"Learning Curve\")\n",
        "plt.xlabel(\"Epochs\")\n",
        "plt.ylabel(\"Loss\")\n",
        "plt.plot(train_loss,label=\"train_loss\")\n",
        "plt.plot(val_loss,label=\"val_loss\")\n",
        "plt.legend(loc=1)\n",
        "\n",
        "plt.subplot(1,2,2)\n",
        "plt.title(\"Accuracy\")\n",
        "plt.xlabel(\"Epochs\")\n",
        "plt.ylabel(\"Accuracy\")\n",
        "plt.plot(train_acc,label=\"train_acc\")\n",
        "plt.plot(val_acc,label=\"val_acc\")\n",
        "plt.legend(loc=1)"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f8b7a34a208>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 28
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nEZEO6P8DSj0BDHM6tuMAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 1080x360 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "metadata": {
        "id": "SvMRBdTee2wI",
        "colab_type": "code",
        "colab": {}
      },
      "cell_type": "code",
      "source": [
        "from keras.utils.vis_utils import plot_model\n",
        "plot_model(model, to_file='model.png', show_shapes='true')"
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}